package com.weiyuwqj.server.service.invest.impl;


import com.weiyuwqj.api.constant.Constants;
import com.weiyuwqj.api.exception.CrowdException;
import com.weiyuwqj.api.model.BasItem;
import com.weiyuwqj.api.model.BusAssetPackagePlan;
import com.weiyuwqj.api.model.BusItemAuto;
import com.weiyuwqj.api.model.BusUserStat;
import com.weiyuwqj.api.model.TicketParamEntity;
import com.weiyuwqj.api.model.vo.BasUserInviteVo;
import com.weiyuwqj.api.service.BusAutoInvestService;
import com.weiyuwqj.api.util.MyAssertUtils;
import com.weiyuwqj.api.util.StringUtils;
import com.weiyuwqj.server.mapper.BasAssetsPackageMapper;
import com.weiyuwqj.server.mapper.BasUserInviteMapper;
import com.weiyuwqj.server.mapper.BasUserMapper;
import com.weiyuwqj.server.mapper.BusAssetPackagePlanMapper;
import com.weiyuwqj.server.mapper.BusItemInvestMapper;
import com.weiyuwqj.server.mapper.BusUserStatMapper;
import com.weiyuwqj.server.service.base.BaseServiceImpl;
import com.weiyuwqj.server.service.invest.module.AutoInvestModule;
import com.weiyuwqj.server.service.sys.module.ConfigTicketModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

/**
 * Copyright 2015-2019 Yunfucloud technology co., Ltd.
 * Created by fuxx on 16/2/29.
 */
@Service("busAutoInvestService")
public class BusAutoInvestServiceImpl extends BaseServiceImpl<BusItemAuto> implements BusAutoInvestService{

    private static Logger log = Logger.getLogger("BusAutoInvestServiceImpl");

    @Autowired
    private BusItemInvestMapper investMapper;
    @Autowired
    private BusUserStatMapper userStatMapper;
    @Autowired
    private AutoInvestModule investModule;
    @Autowired
    private ConfigTicketModule ticketModule;
    @Autowired
    private BasUserInviteMapper userInviteMapper;
//    /**
//     * 触发自动投标
//     * @param auto
//     * @param userId
//     * @param amount
//     * @param item
//     * @param plan
//     * @param itemType
//     */
//    @Override
//    public BigDecimal scanAutoInvest(BusItemAuto auto,Integer userId,BigDecimal amount,
//                                        BasItem item,BusAssetPackagePlan plan,int itemType){
//        switch (itemType){
//            case 1:
//                return itemAutoInvest(auto, userId, amount, item, 5);
//            case 2:
//                return itemAutoInvest(auto, userId, amount, item, 3);
//            case 3:
//                return planAutoInvest(auto, userId, amount, plan, 5);
//            default:throw new CrowdException("");
//        }
//    }

//    /**
//     * 正常标自动投标
//     * @param auto
//     * @param userId
//     * @param amount
//     * @param item
//     * @param investType
//     */
//    private BigDecimal itemAutoInvest(BusItemAuto auto,Integer userId,BigDecimal amount, BasItem item,Integer investType){
//        //用户登录校验
//        MyAssertUtils.isTrue(!(null == userId || userId < 1),"item.invest.session_out");
//        //判断如果是新手标：新手标只支持首投
//        Map statMap=new HashMap();
//        statMap.put("userId",userId);
//        BusUserStat stat=userStatMapper.getOneByUserId(statMap);
//        if(item.getItemIsnew()==1 && stat.getInvestCount()!=0 ){
//            return BigDecimal.ZERO;
//        }
//        //生成冻结订单号
//        String freeOrder = StringUtils.getOrderNo();
//        Map map=investModule.itemDoInvest(userId, amount, item, investType, freeOrder,auto);;
//        BigDecimal dealAmount=new BigDecimal(map.get("dealAmount").toString());
//        freeOrder = investModule.doFundFreeze(dealAmount, userId);
//        investMapper.modifyInvestFreezeOrderNo(freeOrder,map.get("investOrder").toString());
//        if(stat.getInvestCount()==0) {
//            // 首次投资个人奖励
//            ticketReward(userId,Constants.first_invest_nid,null);
//            //首次投资邀请人奖励
//            BasUserInviteVo userInvite = userInviteMapper.getOneByInviteId(userId);
//            if(userInvite !=null){
//                ticketReward(userInvite.getUserId(),Constants.first_invite_invest_nid,dealAmount);
//            }
//        }
//        //单笔投资满额奖励
//        ticketReward(userId,Constants.invest_nid,dealAmount);
//        //总投资满额奖励
//        ticketReward(userId,Constants.total_invest_nid,null);
//        return (BigDecimal)map.get("scale");
//    }

//    /**
//     * 包计划自动投标
//     * @param auto
//     * @param userId
//     * @param amount
//     * @param plan
//     * @param investType
//     */
//    private BigDecimal planAutoInvest(BusItemAuto auto,Integer userId,BigDecimal amount,BusAssetPackagePlan plan,Integer investType){
//        //判断包
//        MyAssertUtils.isNullOrEmpty(plan,"packagePlan.not_exist");
//        //判断包计划状态
//        MyAssertUtils.isTrue(plan.getStatus()==2,"item.status_is_not_right");
//        //用户登录校验
//        MyAssertUtils.isTrue(!(null == userId || userId < 1),"item.invest.session_out");
//        Map map = investModule.planDoInvest(auto, plan, amount, userId, investType);
//
//        //判断如果是新手标：新手标只支持首投
//        Map statMap=new HashMap();
//        statMap.put("userId",userId);
//        BusUserStat stat=userStatMapper.getOneByUserId(statMap);
//        if(stat.getInvestCount()==0) {
//            // 首次投资个人奖励
//            ticketReward(userId,Constants.first_invest_nid,null);
//            //首次投资邀请人奖励
//            BasUserInviteVo userInvite = userInviteMapper.getOneByInviteId(userId);
//            if(userInvite !=null)
//                ticketReward(userInvite.getUserId(),Constants.first_invite_invest_nid,amount);
//        }
//        //单笔投资满额奖励
//        ticketReward(userId,Constants.invest_nid,amount);
//        //总投资满额奖励
//        ticketReward(userId,Constants.total_invest_nid,null);
//        return (BigDecimal)map.get("scale");
//    }

    /**
     * 奖励处理
     * @param userId
     * @param nid
     * @param amount
     */
    private void ticketReward(Integer userId,String nid,BigDecimal amount){
        TicketParamEntity Param = new TicketParamEntity();
        Param.setNid(Constants.total_invest_nid);
        Param.setUserId(userId);
        Param.setAmount(amount);
        ticketModule.addTicket(Param);
    }


}
